import VueRouter from "vue-router";
import routes from "./routes";
import Vue from "vue";
import store from "../store";
Vue.use(VueRouter);
const router = new VueRouter({
  routes,
  mode: "history",
});

// 导航守卫一般在这里统一处理
router.beforeEach((to, from, next) => {
  // 每当导航切换时（包含刷新页面的第一次），该函数会运行，写的不好会无限循环，比如直接写next("/news")
  // 运行next()，直接跳转到to，如果运行next("/news")，则会重新运行beforeEach回调
  // from：之前的路由对象  (this.$route)，第一次刷新，很多之前的路由信息为空
  // to: 即将进入的路由对象 (this.$route)
  // next: 确认导航的一个函数  调用该函数（无参），就会直接进入to， 调用该函数（传入参数），根据传入参数进入新的导航
  // 不调用next，就不会进行路由确认，就不会渲染router-view
  if (to.path === '/') {
    next('/home')
  } else {
    if (to.meta.auth) {
      // 需要鉴权，进入鉴权流程
      const status = store.getters["loginUser/status"];
      if (status === "loading") {
        // 加载中，无法确定是否已经登录
        next({
          path: "/loading", // 可以使用命名路由，这里直接用path
          query: {
            returnurl: to.fullPath,
          },
        });
      } else if (status === "login") {
        // 登录过了
        next();
      } else {
        // 未登录
        alert("该页面需要登录，你还没有登录，请先登录");
        next({
          path: "/login",
          query: {
            returnurl: to.fullPath,
          },
        });
      }
    } else {
      next();
    }
  }


});

export default router;
